// this test is based on 20090113-1.c from the gcc c torture tests

#include <stdio.h>
typedef struct descriptor_dimension {
	int stride;
	int lbound;
	int ubound;
} descriptor_dimension;
typedef struct {
	int *data;
	int dtype;
	descriptor_dimension dim[7];
} gfc_array_i4;

void msum_i4 (gfc_array_i4 * const retarray, gfc_array_i4 * const array, const int * const pdim) {
	int count[7];
	int extent[7];
	int * dest;
	const int * base;
	int dim;
	int n;
	int len;

	dim = (*pdim) - 1;
	len = array->dim[dim].ubound + 1 - array->dim[dim].lbound;

	for (n = 0; n < dim; n++) {
		extent[n] = array->dim[n].ubound + 1 - array->dim[n].lbound;
		count[n] = 0;
	}

	dest = retarray->data;
	base = array->data;
	
	printf("%d\n", *dest);

	do {
		int result = 0;

		for (n = 0; n < len; n++, base++)
			result += *base;
		*dest = result;

		count[0]++;
		dest += 1;
	} while (count[0] != extent[0]);
}

int main() {
	int rdata[3] = {1, 2, 3};
	int adata[9] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
	gfc_array_i4 retarray = { rdata, 265, { { 1, 1, 3 } } };
	gfc_array_i4 array = { adata, 266, { { 1, 1, 3 }, { 3, 1, 3 } } };
	int dim = 2;
	msum_i4 (&retarray, &array, &dim);
	return 0;
}
